#include "ModuleHistED.h"

void ModuleHistED::init(QCVModuleHandlerInterface * parent)
{
	this->parent=parent;
	win=new QWidget();
  layout=new QVBoxLayout(win);
	le_ED=new QLineEdit(win);
	layout->addWidget(le_ED);
}
////////////////////////////////////////////////////////////////////////////////
void ModuleHistED::free()
{
	delete win;
}
////////////////////////////////////////////////////////////////////////////////
cv::Mat & ModuleHistED::process()
{
	return ED;
}
////////////////////////////////////////////////////////////////////////////////
void ModuleHistED::setInput(int n,const cv::Mat & m)
{
	if(n==0)
	{	
		hist1=m.clone();
	}
	if(n==1)
	{	
		hist2=m.clone();
	}

	ED.create(1,1);
	ED=0;

	if( !hist1.empty() && !hist2.empty())
	{
		if( hist1.size()==hist2.size() )
		{
			for(int i=0;i<hist1.rows;i++)
			{
				float diff=hist1(i)-hist2(i);
				ED+=diff*diff;
			}
		}
		else
		{
			std::cout<<"Erreur les histogrammes n'ont m=pas la meme taille\n";
		}
	}
	else
	{
		std::cout<<"Erreur ModuleHistED: L'un des hist est vide\n";
	}

	ED=sqrt(ED(0,0));
	
	le_ED->setText(QString::number(ED(0,0)));

	parent->forceOutput(ED);
}
////////////////////////////////////////////////////////////////////////////////
QWidget* ModuleHistED::widget()
{
	return win;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleHistED::getName()
{
	return tr("Distance euclidienne");
}
////////////////////////////////////////////////////////////////////////////////
int ModuleHistED::nbInputs()
{
	return 2;
}
////////////////////////////////////////////////////////////////////////////////
bool ModuleHistED::setParams(QString params)
{
	QStringList list_params=params.split(";");
		
	if(list_params.size()==1)
	{
		return true;
	}
	else
	{
		return false;
	}	
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleHistED::getParams()
{
	return tr("no_param");
}

////////////////////////////////////////////////////////////////////////////////
QCVModuleInterface * ModuleHistED::clone()
{
	return new ModuleHistED;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleHistED::help(int id)
{
	if(id==-2)
	{
		return tr("Permet de calculer la distance euclidienne entre deux histogrammes");
	}
	else if(id==-1)
	{
		return tr("nombre");
	}
	else if(id==0)
	{
		return tr("histogramme");
	}
	else if(id==1)
	{
		return tr("histogramme");
	}
	else
	{
		return tr("erreur");
	}
}
////////////////////////////////////////////////////////////////////////////////
Q_EXPORT_PLUGIN2(ModuleHistED_plugin,ModuleHistED);  
